//package net.tngou.db;
//
//import java.io.File;
//import java.io.IOException;
//import java.io.StringReader;
//import java.lang.reflect.InvocationTargetException;
//import java.util.ArrayList;
//import java.util.Date;
//import java.util.HashMap;
//import java.util.Iterator;
//import java.util.List;
//import java.util.Map;
//import java.util.Properties;
//
//
//
//
//
//
//
//
//import org.apache.commons.beanutils.BeanUtils;
//import org.apache.commons.configuration2.PropertiesConfiguration;
//import org.apache.commons.configuration2.builder.fluent.Configurations;
//import org.apache.commons.configuration2.ex.ConfigurationException;
//import org.apache.lucene.analysis.Analyzer;
//import org.apache.lucene.analysis.TokenStream;
//import org.apache.lucene.analysis.standard.StandardAnalyzer;
//import org.apache.lucene.document.Document;
//import org.apache.lucene.document.Field;
//import org.apache.lucene.document.TextField;
//import org.apache.lucene.index.DirectoryReader;
//import org.apache.lucene.index.IndexReader;
//import org.apache.lucene.index.IndexWriter;
//import org.apache.lucene.index.IndexWriterConfig;
//import org.apache.lucene.index.MultiReader;
//import org.apache.lucene.index.Term;
//import org.apache.lucene.queryparser.classic.MultiFieldQueryParser;
//import org.apache.lucene.queryparser.classic.ParseException;
//import org.apache.lucene.queryparser.classic.QueryParser;
//import org.apache.lucene.search.Collector;
//import org.apache.lucene.search.IndexSearcher;
//import org.apache.lucene.search.Query;
//import org.apache.lucene.search.ScoreDoc;
//import org.apache.lucene.search.TermQuery;
//import org.apache.lucene.search.TopDocs;
//import org.apache.lucene.search.highlight.Highlighter;
//import org.apache.lucene.search.highlight.InvalidTokenOffsetsException;
//import org.apache.lucene.search.highlight.QueryScorer;
//import org.apache.lucene.search.highlight.SimpleHTMLFormatter;
//import org.apache.lucene.search.highlight.TokenSources;
//import org.apache.lucene.store.Directory;
//import org.apache.lucene.store.FSDirectory;
//import org.apache.lucene.util.Version;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.wltea.analyzer.lucene.IKAnalyzer;
//
//
//
//
//public class LuceneManage {
//
//	
//	
//
//	private static Logger log = LoggerFactory.getLogger(LuceneManage.class);
//	
//	private static final int SIZE = 10000;//设置最大的返回结果
//	
//	 String path = "/lucene/indextest";//默认存放的目录
//	Analyzer analyzer = null;
//	 Directory directory  = null;
//	 IndexWriterConfig config  = null;
//	IndexWriter iwriter =null;
//	DirectoryReader ireader =null;
//	IndexSearcher isearcher = null;
//
//	public LuceneManage() {
//	//	analyzer = new StandardAnalyzer(Version.LUCENE_42);
//		analyzer=new IKAnalyzer();
////		try {
////			directory = FSDirectory.open( new File(path));
////		} catch (IOException e) {
////			 log.error("打开Lucene存储{}失败，请确认文件目录是否正确！", path);
////			e.printStackTrace();
////			
////		}
//		 config = new IndexWriterConfig(Version.LUCENE_4_10_2, analyzer);
//	}
//	
//	public LuceneManage(String path) {
//		//analyzer = new StandardAnalyzer(Version.LUCENE_42);
//		analyzer=new IKAnalyzer();
//		try {
//			directory = FSDirectory.open( new File(path));
//			
//		} catch (IOException e) {
//			log.error("打开Lucene存储{}失败，请确认文件目录是否正确！", path);
//			e.printStackTrace();
//		}
//		 config = new IndexWriterConfig(Version.LUCENE_4_10_2, analyzer);
//	}
//	
//
//
//
//	public PageUtil query(String keyword,int page ,int size ) {
//		
//		List<PageInfo> list = new ArrayList<PageInfo>();
//		int total=0;//总的搜索条数
//		int time =0;//搜索时间
//		try {
//			ireader = DirectoryReader.open(directory);
//			
//			 IndexSearcher isearcher = new IndexSearcher(ireader);
//			    // Parse a simple query that searches for "text":
//			   // QueryParser parser = new QueryParser(Version.LUCENE_42, "fieldname", analyzer);
//			   // Query query = parser.parse("text");
//			    
//			 String[] fields = {"title","keywords","description","content"};//
//			 MultiFieldQueryParser parser = new MultiFieldQueryParser( fields , analyzer);
//			 Query query=parser.parse(keyword);  
//			 Date start = new Date();
//		        //TermQuery query=new TermQuery(term);  
//		        
//		        TopDocs topdocs=isearcher.search(query,null, SIZE); //总的搜索条数
//		       
//		        ScoreDoc[] scoreDocs=topdocs.scoreDocs; 
//		        Date end = new Date();
//		        total= scoreDocs.length;//搜索总数
//		        time = (int) (end.getTime()-start.getTime());//计算搜索时间
//		       
//			    //ScoreDoc[] hits = isearcher.search(query, null, 1000).scoreDocs;
//			   // assertEquals(1, hits.length);
//			    // Iterate through the results:
//		        int startn = (page-1)*size;
//		        int endn = page*size;
//		        
//		        /**
//		         * 高亮 "<font color=\"red\">", "</font>" 字体变红，，默认的是<B> </B>加粗
//		         */
//		        SimpleHTMLFormatter htmlFormatter = new SimpleHTMLFormatter("<font color=\"red\">", "</font>");
//		        
//		        Highlighter highlighter = new Highlighter(htmlFormatter, new QueryScorer(query));
//		        
//			    for (int i = startn; i < scoreDocs.length&&i<endn; i++) {
//			      Document hitDoc = isearcher.doc(scoreDocs[i].doc);
//			      
//			      /**
//			       * 内容高亮
//			       */
//			      TokenStream contentStream = TokenSources.getAnyTokenStream(isearcher.getIndexReader(), topdocs.scoreDocs[i].doc, "content", analyzer);
//			       String highlightercontent = highlighter.getBestFragment(contentStream, hitDoc.get("content"));
//			      
//			       /**
//			        * 标题高亮
//			        */
//			      TokenStream titleStream = TokenSources.getAnyTokenStream(isearcher.getIndexReader(), topdocs.scoreDocs[i].doc, "title", analyzer);
//			      String highlightertitle = highlighter.getBestFragment(titleStream, hitDoc.get("title"));
//			      
//			      PageInfo info = new PageInfo();
//			      info.setId(Long.parseLong(hitDoc.get("id"))) ;
//			      info.setTitle(highlightertitle == null ? hitDoc.get("title"):highlightertitle);
//			      info.setContent(highlightercontent == null ? hitDoc.get("content"):highlightercontent);
//			      info.setUrl(hitDoc.get("url"));
//			      info.setType(hitDoc.get("type"));
//			      info.setImg(hitDoc.get("img"));
//			      if(info.getImg().equals("")) info.setImg(null);
////			      info.setKeywords(hitDoc.get("keywords"));
////			      info.setDescription(hitDoc.get("description"));
//			      list.add(info);
//			    }
//			   
//				ireader.close();
//				//directory.close();
//		} catch (IOException|ParseException|InvalidTokenOffsetsException  e) {
//			e.printStackTrace();
//		
//		} 
//	   
//		
//	  
//		return new PageUtil(page, size, total, time, list);
//	}
//
//public PageUtil query(String keyword,int page ,int size ,String ...types) {
//		
//		List<PageInfo> list = new ArrayList<PageInfo>();
//		int total=0;//总的搜索条数
//		int time =0;//搜索时间
//		try {
//			
//			IndexReader[] readers = new IndexReader[types.length];
//			int idx = 0;
//			for (String type : types) {
//				
//				FSDirectory dir = FSDirectory.open(new File(LuceneUtil.getDir(type)));
//				readers[idx++] = DirectoryReader.open(dir);
//			}
////			ireader = DirectoryReader.open(directory);
////			
////			 IndexSearcher isearcher = new IndexSearcher(ireader);
//			IndexSearcher isearcher = new IndexSearcher(new MultiReader(readers, true));
//			    // Parse a simple query that searches for "text":
//			   // QueryParser parser = new QueryParser(Version.LUCENE_42, "fieldname", analyzer);
//			   // Query query = parser.parse("text");
//			    
//			 String[] fields = {"title","keywords","description","content"};//
//			 MultiFieldQueryParser parser = new MultiFieldQueryParser( fields , analyzer);
//			 Query query=parser.parse(keyword);  
//			 Date start = new Date();
//		        //TermQuery query=new TermQuery(term);  
//		        
//		        TopDocs topdocs=isearcher.search(query,null, SIZE); //总的搜索条数
//		       
//		        ScoreDoc[] scoreDocs=topdocs.scoreDocs; 
//		        Date end = new Date();
//		        total= scoreDocs.length;//搜索总数
//		        time = (int) (end.getTime()-start.getTime());//计算搜索时间
//		       
//			    //ScoreDoc[] hits = isearcher.search(query, null, 1000).scoreDocs;
//			   // assertEquals(1, hits.length);
//			    // Iterate through the results:
//		        int startn = (page-1)*size;
//		        int endn = page*size;
//		        
//		        /**
//		         * 高亮 "<font color=\"red\">", "</font>" 字体变红，，默认的是<B> </B>加粗
//		         */
//		        SimpleHTMLFormatter htmlFormatter = new SimpleHTMLFormatter("<font color=\"red\">", "</font>");
//		        
//		        Highlighter highlighter = new Highlighter(htmlFormatter, new QueryScorer(query));
//		        
//			    for (int i = startn; i < scoreDocs.length&&i<endn; i++) {
//			      Document hitDoc = isearcher.doc(scoreDocs[i].doc);
//			      
//			      /**
//			       * 内容高亮
//			       */
//			      TokenStream contentStream = TokenSources.getAnyTokenStream(isearcher.getIndexReader(), topdocs.scoreDocs[i].doc, "content", analyzer);
//			       String highlightercontent = highlighter.getBestFragment(contentStream, hitDoc.get("content"));
//			      
//			       /**
//			        * 标题高亮
//			        */
//			      TokenStream titleStream = TokenSources.getAnyTokenStream(isearcher.getIndexReader(), topdocs.scoreDocs[i].doc, "title", analyzer);
//			      String highlightertitle = highlighter.getBestFragment(titleStream, hitDoc.get("title"));
//			      
//			      PageInfo info = new PageInfo();
//			      info.setId(Long.parseLong(hitDoc.get("id"))) ;
//			      info.setTitle(highlightertitle == null ? hitDoc.get("title"):highlightertitle);
//			      info.setContent(highlightercontent == null ? hitDoc.get("content"):highlightercontent);
//			      info.setUrl(hitDoc.get("url"));
//			      info.setType(hitDoc.get("type"));
//			      info.setImg(hitDoc.get("img"));
//			      if(info.getImg().equals("")) info.setImg(null);
////			      info.setKeywords(hitDoc.get("keywords"));
////			      info.setDescription(hitDoc.get("description"));
//			      list.add(info);
//			    }
//			   
////				ireader.close();
////				directory.close();
//		} catch (IOException|ParseException|InvalidTokenOffsetsException  e) {
//			e.printStackTrace();
//		
//		} 
//	   
//		
//	  
//		return new PageUtil(page, size, total, time, list);
//	}
//	
//	public void create(PageInfo pageInfo) {
//		try {
//			iwriter = new IndexWriter(directory, config);
//			 Document doc = new Document();
//			 
//			 //添加
//			 Field id = new Field("id", pageInfo.getId()+"",TextField.TYPE_STORED);
//			 Field title = new Field("title", pageInfo.getTitle()+"",TextField.TYPE_STORED);
//			 Field content = new Field("content", pageInfo.getContent()+"",TextField.TYPE_STORED);
//			 Field url = new Field("url", pageInfo.getUrl()+"",TextField.TYPE_STORED);
//			 Field img = new Field("img", pageInfo.getImg()+"",TextField.TYPE_STORED);
//			 Field keywords = new Field("keywords", pageInfo.getKeywords()+"",TextField.TYPE_STORED);
//			 Field description= new Field("description", pageInfo.getDescription()+"",TextField.TYPE_STORED);
//			 Field type= new Field("type", pageInfo.getType()+"",TextField.TYPE_STORED);
//				
//			 doc.add(id);
//			 doc.add(title);
//			 doc.add(content);
//			 doc.add(url);
//			 doc.add(img);
//			 doc.add(keywords);
//			 doc.add(description);
//			 doc.add(type);
//			 iwriter.addDocument(doc);
//			 iwriter.close();
//				
//		} catch (IOException e) {
//			// TODO Auto-generated catch block
//			e.printStackTrace();
//		}
//	   
//
//	}
//
//	
//	public void delete(long id) {
//		// TODO Auto-generated method stub
//		try {
//			iwriter = new IndexWriter(directory, config);
//			iwriter.deleteDocuments(new Term("id", String.valueOf(id)));
//			iwriter.commit();
//			iwriter.close();
//		} catch (IOException e) {
//			// TODO Auto-generated catch block
//			e.printStackTrace();
//		}
//
//	}
//
//	
//	public void update(PageInfo pageInfo) {
//		// TODO Auto-generated method stub
//		delete(pageInfo.getId());
//		create(pageInfo);
//
//	}
//	
//	
//
//	/**
//	 * 取得相关信息
//	 * @param fullyQualifiedName
//	 * @param keyword
//	 * @param page
//	 * @param size
//	 * @return
//	 */
//	public List<PageInfo> querycache(String fullyQualifiedName,String keyword, int page, int size) {
//		
//		@SuppressWarnings("unchecked")
//		List<PageInfo> list= (List<PageInfo>) cacheEngine.get(fullyQualifiedName , keyword);
//		if(list==null)
//		{
//			list = new ArrayList<PageInfo>();
//			DirectoryReader ireader =null;
//			IndexSearcher isearcher = null;
//			try {
//				ireader = DirectoryReader.open(directory);
//				
//				 isearcher = new IndexSearcher(ireader);
//				    // Parse a simple query that searches for "text":
//				   // QueryParser parser = new QueryParser(Version.LUCENE_42, "fieldname", analyzer);
//				   // Query query = parser.parse("text");
//				    
//				 String[] fields = {"title","keywords","description","content"};//
//				 MultiFieldQueryParser parser = new MultiFieldQueryParser(fields , analyzer);
//				 Query query=parser.parse(keyword);  
//			 
//			        TopDocs topdocs=isearcher.search(query,null, SIZE); //总的搜索条数
//			       
//			        ScoreDoc[] scoreDocs=topdocs.scoreDocs; 
//			     
//			      
//			       
//				    //ScoreDoc[] hits = isearcher.search(query, null, 1000).scoreDocs;
//				   // assertEquals(1, hits.length);
//				    // Iterate through the results:
//			        int startn = (page-1)*size;
//			        int endn = page*size;
//			      
//				    for (int i = startn; i < scoreDocs.length&&i<endn; i++) {
//				      Document hitDoc = isearcher.doc(scoreDocs[i].doc);
//
//				      PageInfo info = new PageInfo();
//				      info.setId(Long.parseLong(hitDoc.get("id"))) ;
//				      info.setTitle( hitDoc.get("title"));
//				      info.setUrl(hitDoc.get("url"));
//				      info.setType(hitDoc.get("type"));
//				    
//				      list.add(info);
//				    }
//				   
//					ireader.close();
//					//directory.close();
//			} catch (IOException e) {
//				
//				e.printStackTrace();
//			} catch (ParseException e) {
//				
//				e.printStackTrace();
//			} 
//			cacheEngine.add(fullyQualifiedName, keyword, list);
//			
//		}
//		return list;
//	}
//	
//	
//	
//	 protected static Domain getDomain()
//	 {
//		 Domain domain= new Domain();
//		 try {
//			 
//			 File propertiesFile = new File("domain.properties");
//			  Configurations configs = new Configurations();
//			  PropertiesConfiguration daProperties = configs.properties(propertiesFile);
//			
//			Map<String, String> cp_props = new HashMap<String, String>();//使用cp_props做临时的配置文件的存储
//			Iterator<String> iterable = daProperties.getKeys();//取得配置文件中的key
//			while (iterable.hasNext()) {
//				String skey=iterable.next();
//				  cp_props.put(skey, "http://"+daProperties.getProperty(skey)+"/");				
//			}
//			BeanUtils.populate(domain, cp_props);//把配置文件的值封装到dataSource
//			
//		} catch (ConfigurationException | IllegalAccessException | InvocationTargetException e) {
//			// TODO Auto-generated catch block
//			e.printStackTrace();
//		}	
//		 return domain;
//	}
//	 
//	 public  static Domain domain = getDomain();
//	 
//
//
//}
